/* pipdemo.c */
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#include <sys/wait.h>
char sendbuf[] = "I am Linux";
char recbuf[20];
char parrecbuf[20];

void reverse(char *str) {
    if (str == NULL) return;
    char *p = str;
    char *q = str;
    while (*q) ++q;
    q--;
    while (q > p) {
        char t = *p;
        *p++ = *q;
        *q-- = t;
    }
}

int main() {
    int mypipe[2], fd;
    pid_t pid;

    // 创建管道
    if (pipe(mypipe) < 0) {
        perror("pipe failed");
        exit(0);
    }

    // 创建子进程
    if ((pid = fork()) < 0) {
        perror("fork failed");
        exit(0);
    }

    // 子进程
    if (pid == 0) {
        close(mypipe[1]); // 关闭写端
        read(mypipe[0], recbuf, strlen(sendbuf));
        printf("The child process get %s\n", recbuf);
        reverse(recbuf);
        close(mypipe[0]); // 关闭读端
    }

    // 父进程
    if (pid > 0) {
        close(mypipe[0]); // 关闭读端
        write(mypipe[1], sendbuf, strlen(sendbuf));
        sleep(10); // 等待子进程处理
        close(mypipe[1]); // 关闭写端
        wait(0); // 防止僵尸进程
    }

    return 0;
}
